package exttable.usingTableModelWithFindCell;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;

public class UsingTableModelWithFindCell extends AbstractTableModel{
    // здесь мы будем хранить названия столбцов
    private List<String> columnNames = new ArrayList<String>();

    // список типов столбцов
//    private List<Class> columnTypes = new ArrayList<Class>();

    // хранилище для полученных данных из базы данных
    private List<List<Object>> data = new ArrayList<List<Object>>();

    private boolean editable;

    // конструктор позволяет задать возможность редактирования
    public UsingTableModelWithFindCell(boolean editable) {
        this.editable = editable;
    }

    @Override
    public int getColumnCount() {
        synchronized (columnNames) {
            return columnNames.size();
        }
    }

    @Override
    public int getRowCount() {
        synchronized (data) {
            return data.size();
        }
    }

    @Override
    public Object getValueAt(int row, int column) {
        synchronized (data) {
            return ((List) data.get(row)).get(column);
        }
    }

    // тип данных столбца
//    public Class getColumnClass(int column) {
//        return (Class) columnTypes.get(column);
//    }

    // название столбца
    public String getColumnName(int column) {
        return (String) columnNames.get(column);
    }

    // возможность редактирования
    public boolean isEditable(int row, int column) {
        return editable;
    }

    // замена значения ячейки
    public void setValueAt(
            Object value, int row, int column) {
        synchronized (data) {
            ((List) data.get(row)).set(column, value);
        }
    }

    public void setDataSource(List<List<Object>> data, List<String> columnNames){
        this.data=data;
        this.columnNames=columnNames;
    }

    public void setDataSource(Vector<Vector<Object>> data, Vector<String> columnNames){
        for(Vector<Object> vector:data){
            List<Object> list=Collections.list(vector.elements());
            this.data.add(list);
        }
        this.columnNames=Collections.list(columnNames.elements());
    }

    public void setDataSource(Object[][] data, String[] columnNames){
        for(Object[] arObjects:data){
            List<Object> list=Arrays.asList(arObjects);
            this.data.add(list);
        }
        this.columnNames=Arrays.asList(columnNames);
    }

    public int[]getCellCoordinateForTwoColumnsTable(String findValue){
        int[]cellCoordinate=new int[2];
        for(int i=0;i<data.size();i++){
            if(findValue.equals(getValueAt(i, 0).toString())){
                cellCoordinate[0]=i;
                cellCoordinate[1]=1;
                return cellCoordinate;
            }
        }
        return null;
    }


}
